/**
 * Copyright (c) 2013-2022 Nikita Koksharov
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.redisson.client;

import org.redisson.api.listener.MessageListener;
import org.redisson.client.protocol.pubsub.PubSubType;

/**
 * Redis发布订阅监听器接口，用于监听Redis的发布订阅消息。
 * 继承自MessageListener，提供泛型参数V以支持不同类型的消息监听。
 */
public interface RedisPubSubListener<V> extends MessageListener<V> {


    /**
     * 处理订阅和发布状态的更新。
     *
     * @param type    表示PubSub操作类型的枚举，例如订阅或取消订阅。
     * @param channel 指定操作的频道名称。
     *                该方法没有返回值，因为它主要用于触发状态更新的操作，而不是返回结果。
     */
    void onStatus(PubSubType type, CharSequence channel);

    /**
     * 当收到与指定模式匹配的消息时触发的处理函数。
     *
     * @param pattern 指定的模式，用于匹配接收到的消息。
     * @param channel 消息所在的频道或路径。
     * @param message 匹配到的消息内容，其类型为泛型 V，允许用户定义消息的具体类型。
     *                这使得函数能够处理各种类型的消息，提高了灵活性和可扩展性。
     */
    void onPatternMessage(CharSequence pattern, CharSequence channel, V message);

}
